2010-01-12 4 views
88

우리는 응용 프로그램 섹션을 슬래시로 구분 된 단어로 지정하는 URL 시스템을 설계하고 있습니다. URL의 관련 부분은 (클라이언트 측에 컨트롤러 레이어로 해석됩니다) 해시에있을 것입니다, 그래서 특히이는, GWT에 : 일부 섹션이 추가 속성을해야 할 수도 있습니다친절한 URL 사용을 위해 콜론이 안전합니까?

http://site/gwturl#section1/section2 

, 어떤 :으로 지정하여 URL의 섹션 부분이 모호하지 않도록하고 싶습니다.

물론
http://site/gwturl#user:45/comments 

, 우리는 URL 편의를 위해이 일을하는, 그래서 우리는 이러한 문자 중 누구도 어떤을 보유하지 않습니다 있는지 확인하고 싶습니다 : 코드는 다음과 같이 :에 다음 /에 첫번째 분할 것 특별한 의미는 브라우저에서 URL 인코딩-, 또는 다른 시스템, 그리고이 같은 URL로 끝날 것

http://site/gwturl#user%3A45/comments <--- BAD 

이런 식으로 콜론을 사용 안전 (하는 내가되지 않습니다 의미 자바 스크립트 또는 Java 코드조차도 브라우저, 북 마킹 시스템에 자동으로 인코딩됩니까?

+0

어쩌면 당신이 클라이언트 측 만에 URL을 사용 (더 명확하게)를 지정하는 것이 좋습니다입니까? 답변이 많기 때문에 HTTP를 사용하는 서버로 URL을 전송한다고 가정하는 것 같습니다. – Veger

+0

클라이언트 측에서 프래그먼트 사용이 발생하고 있음을 명확히하기 위해 편집되었습니다. – Nicole

+0

궁금한 점이 있습니다. 10 개월 후이 URL 체계가 효과가 있습니까? 나는 동일한 계획을 사용하는 것을 고려하고있다. –

답변

66

나는 최근 wrote의 URL 인코더 후 경우에 연결 어떤 포트 구별하는 데 사용됩니다, 그래서이 내 마음에 꽤 신선합니다.

http://site/gwturl#user:45/comments

fragment part (user:45/comments)의 모든 문자는 RFC 3986 URI의 완벽하게 합법적이다. ABNF

관련 부품 : 이러한 제한에서 제외하고

fragment  = *(pchar/"/"/"?") 
pchar   = unreserved/pct-encoded/sub-delims/":"/"@" 
unreserved = ALPHA/DIGIT/"-"/"."/"_"/"~" 
pct-encoded = "%" HEXDIG HEXDIG 
sub-delims = "!"/"$"/"&"/"'"/"("/")" 
       /"*"/"+"/","/";"/"=" 

는 조각 부분은 응용 프로그램을 제공하는 일 외의 정의 구조가 없습니다. 스키마 (http)는이 부분을 서버로 보내지 않는다고 말합니다.


편집 :

D' 오! HTML 4 규격을 he points out는 요소 이름/식별자을 제한 할 때 URI 사양에 대한 내 주장에도 불구하고

irreputable는 정답을 제공합니다.

식별자 규칙은 changing in HTML 5입니다. URI 제한은 여전히 ​​적용됩니다 (글을 쓰는 시점에서 HTML 5의 URI 사용과 관련하여 해결되지 않은 문제가 있습니다).

+0

나는 당신이 뭔가있는 것 같아, 조금 더 설명 할 수 있니? GWT를 사용하고 있기 때문에 이것을 서버로 보내지 않는 것은 문제가되지 않습니다. 내가 인용 한 섹션에 지정된 구문에 대해 확실하지 않다. – Nicole

+0

그러나':'는 하위 delim이 아닌 gen-delim입니다. – bobince

+1

세미콜론은 pchar에 적합합니다. 따라서 하위 델린이나 gen-delim에 관계없이 문제가되지 않습니다. – Veger

6

나는 그것에 의지하지 않을 것이다. 아마도 많은 사용자 에이전트에 의해 %3A으로 인코딩 된 URL을 얻게 될 것입니다. URLEncoder의 javadoc에서

+5

* 많은 * 사용자 에이전트? – arbales

+1

@arbales : 예. 덜 순응하는 사용자 에이전트는 준수하지 않는 URL을 방치하지 않을 것입니다. – Asaph

4

: HTML 형태 인코딩에 대한 자세한 내용은

의 HTML specification에게 문의하십시오.

문자열을 인코딩 할 때, 다음 규칙이 적용

  • 문자 숫자 기호 "9"내지 "Z", "A", "Z"통해 "0" 통해 "A" 유지 똑같다.
  • 특수 문자 ".", "-", "*"및 "_"은 동일하게 유지됩니다.
  • 공백 문자 "" " "은 플러스 기호 "+"로 변환됩니다.
  • 다른 모든 문자는 안전하지 않으며 먼저 스키마를 사용하여 하나 이상의 바이트로 으로 변환됩니다. 그런 다음 각 바이트는 3 문자 문자열 "% xy"로 으로 표시됩니다. 여기서 xy는 두 자리 16 진수 바이트 표현입니다. 사용할 수있는 인코딩 스키마는 UTF-8입니다. 그러나 호환성이 인 경우 인코딩이 이 아닌 경우 플랫폼의 기본 인코딩 이 사용됩니다. 이다

: 안전하지 않습니다.

-1

결장은 안전하지 않습니다. See here

+0

그 페이지는 왜 안전하지 않은지에 대한 동기를 부여하지 않습니다. 참조 된 [RFC2396] (http://www.rfc-editor.org/rfc/rfc2396.txt)도 이스케이프되어야한다고 말하지 않습니다. 또한 제공되는 변환기 스크립트는 인코딩하지 않습니다 (Chrome 9의 경우). –

3

위키 피 디아 URLs에 Firefox가 포함되어 있거나 인코딩 된 것을 볼 수 없습니다.

+1

오페라는 세미콜론을 유지하지만, 그러한 행동에 의존하는 것은 좋은 일이 아닙니다. – Veger

+1

Renesis는 URL 경로가 아니라 URL 조각에 대해 이야기합니다. – Gumbo

+0

위키 백과는이 질문을 쓸 때 내 생각 중 하나였습니다. 콜론의 사용은 기술적으로 잘못되었거나 안전하지 않습니까? 나는 일반적으로 Wikipedia URL에 인코딩 된 것을 볼 수 있지만 결코 콜론이 아니기 때문에 혼란 스럽다. – Nicole

-4

그것은 안전한 문자가 아닌 당신이 그것을 잘 도메인 이름

3

콜론은 프로토콜에 인증이 필요한 경우 사용자 이름과 암호 간의 구분으로 사용됩니다.

49

URI 표준에 대한 McDowell의 분석 외에도 조각은 유효한 HTML 앵커 이름이어야합니다. http://www.w3.org/TR/html4/types.html#type-name

ID와 NAME 토큰에 따르면 문자로 시작한다 ([A-ZA-Z])과 문자, 숫자 (0-9), 하이픈의 숫자가 될 수있다 이어 ("-"), 밑줄이 ("_"), 콜론 (":") 및 마침표 (".")입니다.

운이 좋다. ":"명시 적으로 허용됩니다. "%"는 불법적 인 문자이기 때문에뿐만 아니라 조각이 앵커 이름 char-by-char와 많이 일치하기 때문에 누구도 "%"- 이스케이프 처리해야하지 않으므로 아무 에이전트도 어쨌든 성질을 나타내지 않아야합니다.

그러나 테스트해야합니다. 엄격하게 웹 표준을 따르지 않으며 때로는 표준이 상충합니다. 예를 들어 HTTP/1.1 RFC 2616은 요청 URL에 쿼리 문자열을 허용하지 않지만 HTML은 GET 메서드로 양식을 제출할 때 하나를 구성합니다. 실제 세계에서 구현 된 것은 하루가 끝나면 승리합니다.

+1

@ 평판이 좋지 않은 - 네, 당신 말이 맞습니다. – McDowell

40

MediaWiki와 다른 위키 엔진은 URL에 콜론을 사용하여 큰 문제가없는 네임 스페이스를 지정합니다.

예를 들어 http://en.wikipedia.org/wiki/Template:Welcome

+19

가장 관련성이 높은 답변입니다. 우리 모두는 스펙에 포함 된 것이 웹 개발에서 현실과 거의 관련이 없다는 것을 알고 있습니다. 당신은 "세계의 톱 10 웹 사이트 중 하나"보다 "안전"에 대한 훨씬 더 나은 보증을 얻지 못할 것입니다. –

관련 문제