programing

URL에 쉼표를 사용할 수 있습니까?

i4 2023. 8. 4. 22:38
반응형

URL에 쉼표를 사용할 수 있습니까?

저는 일반적으로 URL 다시 쓰기를 사용하여 제 웹 사이트에 콘텐츠 ID를 전달합니다.

 Foo.1.aspx 

에 다시 쓰는.

 Foo.aspx?id=1

특정 애플리케이션의 경우 여러 ID를 하나의 페이지에 전달해야 하므로 이를 수락하도록 다시 작성했습니다.

 Foo.1,2,3,4,5.aspx

이것은 Cassini(Visual Studio용 기본 제공 애드혹 웹 서버)에서 잘 작동하지만 IIS를 실행하는 라이브 서버에서 Internet Explorer가 웹 페이지를 표시할 수 없습니다.IIS 제한 사항입니까?쉼표 대신 대시나 밑줄을 사용해야 합니까?

URL의 파일 이름 부분에는 쉼표가 허용되지만 도메인*에서는 예약된 문자인 것으로 알고 있습니다.

어떤 버전의 IE를 사용하고 있습니까?IE5.5에서 쉼표로 URL을 잘라내는 이상한 보고서를 발견했습니다(여기 링크는 링크이지만 IE7에서 쉼표로 URL을 테스트한 적이 있으며 문제가 없는 것 같습니다. IE 버그가 있었다면 더 이상 없는 것 같습니다. IIS 문제일 수 있습니까?

페이지 오류가 규칙 실패로 인한 것인지 궁금합니다.mod_rewrite 사용자의 ID로 할 수 ?Foo.aspx일치하는 것 뿐일 가능성이 있습니까?Foo.N,N그리고 콤마에 더 실패?


* From the URI RFC:

2.2. 예약된 캐릭터

대부분의 URI에는 특정 특수 문자로 구성되거나 특정 문자로 구분되는 구성 요소가 포함됩니다.이러한 문자는 URI 구성 요소 내에서 사용이 예약된 용도로 제한되므로 "예약됨"이라고 합니다.URI 구성 요소의 데이터가 예약된 목적과 충돌하는 경우 URI를 구성하기 전에 충돌하는 데이터를 제거해야 합니다.

 reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
                "$" | ","

위의 "예약된" 구문 클래스는 URI 내에서 허용되지만 일반 URI 구문의 특정 구성 요소 내에서는 허용되지 않는 문자를 참조합니다.

URL 라우팅은 기본적으로 먼저 파일이 존재하는지 확인하고 쉼표는 파일 이름에 합법적이지 않으므로 오류가 발생하는 것으로 기억합니다.IIS에 처리를 위해 asp.net 에 도달하기 전에 요청을 중단하는 레거시 코드가 있을 수 있습니다.

Scott Hanselman의 블로그 게시물은 이것에 대해 약간 언급하고 있으며 당신과 관련이 있을 수 있습니다.


일반적인 의견으로는:URL 다시 쓰기는 일반적으로 URL을 쉽고 기억하기 쉽게 만드는 데 사용됩니다.

~/page.aspx?id=1,2,3,4보다 나쁘지도 않고 나쁘지도 않습니다.~/page/1-2-3-4.aspx둘 다 사용하기 어려운데 왜 추가적인 노력을 해야 합니까?할 수 있다는 이유만으로 새 URL 양식을 만들지 않도록 합니다.사용자, 헬프 데스크 및 기타 개발자들은 혼란스러울 뿐입니다.

URL 다시 쓰기는 변환에 가장 적합합니다.

~/products/view.aspx?id=1
~/products/category.aspx?type=beverage

안으로

~/products/view/1
~/products/category/beverage

사용해 보십시오.%2cURL에서 쉼표를 바꿉니다.

아래는 콘로이P의 답변 외에도 RFC에 대한 또 다른 인용문입니다.여기에는 안전하지 않은 여러 문자가 기록되어 있지만 쉼표에 대해서는 언급되어 있지 않습니다(콤마가 안전하다는 의미).

문자는 여러 가지 이유로 안전하지 않을 수 있습니다.URL을 전사하거나 유형을 설정하거나 워드 프로세싱 프로그램을 처리할 때 상당한 공간이 사라지고 미미한 공간이 유입될 수 있기 때문에 공백 문자는 안전하지 않습니다."<" 및 ">" 문자는 자유 텍스트의 URL 주위에 구분 기호로 사용되므로 안전하지 않습니다. 일부 시스템에서는 따옴표("")를 URL 구분에 사용합니다.문자 "#"은(는) 안전하지 않으므로 항상 인코딩되어야 합니다. 이는 World Wide Web 및 다른 시스템에서 URL을 뒤에 따를 수 있는 조각/앵커 식별자로 구분하기 위해 사용되기 때문입니다.%" 문자는 다른 문자의 인코딩에 사용되므로 안전하지 않습니다.게이트웨이 및 기타 전송 에이전트가 때때로 이러한 문자를 수정하는 것으로 알려져 있기 때문에 다른 문자는 안전하지 않습니다.이러한 문자는 "{}", "}", "|", "\", "^", "~", "", "] 및 ""입니다.

안전하지 않은 모든 문자는 항상 URL 내에서 인코딩되어야 합니다. 예를 들어, 일반적으로 fragment 또는 닻 식별자를 처리하지 않는 시스템에서도 "#" 문자는 URL 내에서 인코딩되어야 하므로 URL을 사용하는 다른 시스템에 복사할 경우 URL 인코딩을 변경할 필요가 없습니다.

쉼표는 사양에 따라 경로, 쿼리 문자열 및 fragment에서 사용할 수 있습니다.하지만 IE가 사양에 부합하지 않는다면 저는 놀라지 않을 것입니다.Claudiu가 제안하는 대로 실체를 시도해 보십시오. 하지만 왜 그것이 필요한지 모르겠습니다.

여러 ID를 올바르게 수락하는 방법은 다음과 같습니다.

Foo.aspx?id=1;id=2;id=3;id=4;id=5

그것이 바로 목표입니다.URL을 다시 작성할 때 원본 모양에 대한 규칙을 특정 범위로 설정할 수 있습니다.

저는 StackOverflow에서도 이것을 배워야 했습니다.다음 질문을 참조하십시오.
문자열에서 int 나누기

정답.

문제는 쉼표였습니다.IE가 로컬 호스트에서 정상적으로 표시할 수 있었기 때문에 IIS에 문제가 있었던 것 같습니다(IE가 아님).

어쨌든 나는 방금 URL 형식을 이것으로 변경했고 그것은 잘 작동합니다:

Foo.1-2-3-4-5.aspx

전면 컨트롤러를 설치하면 다음과 같은 작업을 수행할 수 있습니다.

index.aspx?c=Foo/1/2/3/4

프론트 컨트롤러는 메서드 이름과 매개 변수를 선택하여 전달합니다.이것은 요즘 꽤 흔한 기술입니다.

언급URL : https://stackoverflow.com/questions/198606/can-i-use-commas-in-a-url

반응형